package com.own.component.log.operation.entity;

import com.own.component.common.login.user.BaseLoginUser;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * LogOperationEntity
 *
 * @author chenxueli
 * @date 2023-08-08 15:36:00
 */
@Getter
@Setter
@Accessors(chain = true)
public class LogOperationEntity implements Serializable {

    /**
     * 请求地址
     */
    private String requestUrl;

    /**
     * 服务名称
     */
    private String service;

    /**
     * 请求方式
     */
    private String requestMethod;

    /**
     * 响应code
     */
    private String code;

    /**
     * 响应信息
     */
    private String message;

    /**
     * 登录的用户信息
     */
    private BaseLoginUser loginUser;

    /**
     * 方法全限定名
     */
    private String methodName;

    /**
     * 模块名称
     */
    private String moduleName;

    /**
     * 操作名称
     */
    private String operationName;

    /**
     * ip信息
     */
    private String ip;

    /**
     * 客户端信息
     */
    private String client;

    /**
     * 操作状态 1=成功 2=失败
     */
    private int status;

    /**
     * 链路id
     */
    private String traceId;

    /**
     * 等级
     */
    private int level;

    /**
     * 额外信息
     */
    private Map<String, Object> extra;

    /**
     * 请求信息
     */
    private ExtraRequestParam request;

    /**
     * 响应信息
     */
    private ExtraResponseParam response;

    /**
     * 请求header信息
     */
    private Map<String, String> headers;

    /**
     * 请求cookie信息
     */
    private Map<String, String> cookies;

    @Getter
    @Setter
    @AllArgsConstructor
    public static class ExtraRequestParam {
        /**
         * 时间
         */
        private LocalDateTime time;

        /**
         * 请求参数
         */
        private String params;

    }

    @Getter
    @Setter
    @AllArgsConstructor
    public static class ExtraResponseParam {
        /**
         * 时间
         */
        private LocalDateTime time;

        /**
         * 请求参数
         */
        private Map<String, Object> params;

    }

}
